/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package pers.sakurasora.lesson.web;

import com.github.pagehelper.Page;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import pers.sakurasora.lesson.entity.SysUser;
import pers.sakurasora.lesson.service.UserService;

/*----------------------------------------------------------------------------------------------------------------------------------------------------------
 *             在一般情况下，控制器方法返回的字符串都会被当做逻辑视图名来处理。                                                                            *
 *             但是当字符串带有“forward”或者“redirect”前缀时，则对他们进行特殊处理。把“forward”与“redirect”当成指示符，其后的字符串作为URL来处理。 *
 *             redirect：会让浏览器发起一个新的请求。                                                                                                      *
 *             forward：与当前请求同属一个                                                                                                                 *
-----------------------------------------------------------------------------------------------------------------------------------------------------------*/

/**
 * @author SakuraSora
 * @Email 1468071675@qq.com
 * @DateTime 2018-11-5 16:46:31
 *
 * @Description
 *              控制层(表示层)--处理user请求
 */
@Controller
@RequestMapping("/user") //所有的user请求都在这个路径下
public class UserController {

    @Autowired
    UserService userService;
    
    /**
     * 控制器--显示注册表单
     * @return
     *          注册页面
     */
    @RequestMapping("/register")
    public String register() {
        return "user/register";
    }
    
    /**
     * 控制器--（真正的动作)注册跳转页面
     * @param user
     * @return 
     *          注册成功--注册成功页面<br>
     *          注册失败--注册失败页面
     */
    @RequestMapping("/doRegister") //表示层：注册
    public String doRegister(SysUser user) {
        boolean result = userService.addUser(user); //service层：增加一个用户；     数据库层：insert一条数据
        if (result) 
            return "user/registerSuccess";
        else
            return "user/registerFail";
    }
    
    /**
     * 控制器--用户列表
     * @param model
     * @return 视图名
     */
    @RequestMapping("/list")
    public  String userList(ModelMap model) {
        List<SysUser> list = userService.getUserList(null);
        model.addAttribute("list", list);
        return "user/list";
    }
    
    /**
     * 控制器--用户列表(easyUI)
     * @param model
     * @return 视图名
     */
    @RequestMapping("/list/easyui")
    public  String userListEasyui(ModelMap model) {
        List<SysUser> list = userService.getUserList(null);
        model.addAttribute("list", list);
        return "user/list_easyui";
    }
    
    /**
     * 控制器--用户列表(easyUI)
     * @param model
     * @return 返回json数据
     */
    @RequestMapping("/list/easyui/data")
    @ResponseBody
    public Map userListEasyuiData() {
        Map model = new HashMap();
        Page<SysUser> list = (Page<SysUser>)userService.getUserList(null);
        model.put("rows", list.getResult());
        model.put("total", list.getTotal());
        return model;
    }
    
    /**
     * 删除用户列表的用户
     * @param id
     * @return 
     */
    @RequestMapping("/delete")
    public String deleteUser(int id) {
        userService.deleteUser(id);
        return "redirect:/user/list.htm"; //这种修改的操作一般使用重定向（因为刷新会涉及到表单的重新提交问题）
    }
    
    /**
     * 查询用户名是否已存在
     * @param name
     * @return  返回json数据
     *          存在--false<br>
     *          不存在--true
     */
    @RequestMapping("/checkAccount")
    @ResponseBody /*ajax返回的一般不是一个视图而是一些片段*/
    public boolean checkAccount(String name) {
        return userService.checkAccount(name);
    }
}
